// var nextPermutation = function(nums) {
//     // 找出较小数(从右往左第一个非单调递增的)
//     // 找出较大数，两数交换(从右往左第一个比较小数大的)
//     // 后续反转，范围是较小数之后

//    let index;
//    for(let i = nums.length - 2; i >= 0; i--){
//        if(nums[i] < nums[i+1]){
//            index = i
//            console.log(index)
//            break
//        }
//    }

//    for(let i = nums.length - 1; i > index; i--){
//        if(nums[i] > nums[index]){
//            [nums[index], nums[i]] = [nums[i], nums[index]]

//            console.log(i)
//            break
//        }
//    }

//    let left = index+1;
//    let right = nums.length - 1;
//    while(left < right){
//        [nums[left], nums[right]] = [nums[right], nums[left]]
//        left++;
//        right--
//    }

//    return nums

// };


var nextPermutation = function(nums) {
    // 找到一个 单调递减的 非单调递减至 1321 ()
    // 然后找到下一个更大数 2 
    // 交换 
    // 翻转后面数字

    let index = nums.length - 2;
    while(index >= 0 && nums[index] >= nums[index+1]){
        index-- // 单调递增的就继续
    }

    console.log(index)

    if(index >= 0){
        let j = nums.length - 1;
        while(j >=0 && nums[j] <= nums[index]){
            j--
        }

        [nums[index], nums[j]] = [nums[j], nums[index]]

        console.log(j)
    }

    //翻转index - j的字符
    let left = index +1; // 不包含当前
    let right = nums.length - 1;
    while(left < right){
        [nums[left], nums[right]] = [nums[right], nums[left]]
        left++
        right--
    }

    return nums

};

console.log(nextPermutation([3,2,1]))